//package com.jasperframework.boot.common.utils;
//
//
//import org.apache.commons.lang3.StringUtils;
//import org.apache.hc.client5.http.classic.methods.HttpGet;
//import org.apache.hc.client5.http.classic.methods.HttpPost;
//import org.apache.hc.client5.http.config.RequestConfig;
//import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
//import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder;
//import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
//import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
//import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
//import org.apache.hc.core5.http.ContentType;
//import org.apache.hc.core5.http.HttpEntity;
//import org.apache.hc.core5.http.HttpHost;
//import org.apache.hc.core5.http.io.entity.EntityUtils;
//import org.apache.hc.core5.http.message.BasicNameValuePair;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.Objects;
//
///**
//  * <p>  </p>
//  *
//  * @site https://miliqkdoc.motopa.cn/
//  * @author daizhao
//  * @date 2022/12/12 12:12
//  */
//public class CloseableHttpClientUtil {
//
//    private static final String CHARSET = "UTF-8";
//
//    private static final Integer SC_OK = 200;
//
//    private static final Integer CONNECTTIMEOUT = 60000;
//
//    private static final Integer SOCKETTIMEOUT = 15000;
//
//
//    public static CloseableHttpClient getCloseableHttpClient(int connectTimeout, int socketTimeout){
//        RequestConfig config = RequestConfig.custom().setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout).build();
//        CloseableHttpClient httpClient = HttpClientBuilder.create()
//                .setRetryHandler(new StandardHttpRequestRetryHandler())//默认重试次数
//                .setDefaultRequestConfig(config).build();
//        return httpClient;
//    }
//
//    public static CloseableHttpClient getCloseableHttpClient(int connectTimeout, int socketTimeout, HttpHost proxy){
//        RequestConfig config = RequestConfig.custom().setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout).build();
//        CloseableHttpClient httpClient = HttpClientBuilder.create()
//                .setProxy(proxy)//设置代理服务器
//                .setRetryHandler(new StandardHttpRequestRetryHandler())//默认重试次数
//                .setDefaultRequestConfig(config).build();
//        return httpClient;
//    }
//
//    public static String doHttpGet(String url, Map params){
//        return doGet(url, params, CHARSET, null, null, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpGet(String url, Map params, List<Header> headers){
//        return doGet(url, params, CHARSET, headers, null, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpGet(String url, Map params, HttpHost proxy){
//        return doGet(url, params, CHARSET, null, proxy, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpGet(String url, Map params, List<Header> headers, HttpHost proxy){
//        return doGet(url, params, CHARSET, headers, proxy, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpGet(String url, Map params, List<Header> headers, HttpHost proxy, int connectTimeout, int socketTimeout){
//        return doGet(url, params, CHARSET, headers, proxy, connectTimeout, socketTimeout);
//    }
//
//    //===================================================================================================
//
//    public static String doHttpPost(String url, Map params){
//        return doGet(url, params, CHARSET, null, null, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpPost(String url, Map params, List<Header> headers){
//        return doPost(url, params, CHARSET, headers, null, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpPost(String url, Map params, HttpHost proxy){
//        return doPost(url, params, CHARSET, null, proxy, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpPost(String url, Map params, List<Header> headers, HttpHost proxy){
//        return doPost(url, params, CHARSET, headers, proxy, CONNECTTIMEOUT, SOCKETTIMEOUT);
//    }
//
//    public static String doHttpPost(String url, Map params, List<Header> headers, HttpHost proxy, int connectTimeout, int socketTimeout){
//        return doPost(url, params, CHARSET, headers, proxy, connectTimeout, socketTimeout);
//    }
//
//    /**
//     * HTTP Get 获取内容
//     *
//     * @param url     请求的url地址 ?之前的地址
//     * @param params  请求的参数
//     * @param charset 编码格式
//     * @return 页面内容
//     */
//    private static String doGet(String url, Map params, String charset, List<Header> headers, HttpHost proxy, int connectTimeout, int socketTimeout) {
//        if (StringUtils.isBlank(url)) {
//            return null;
//        }
//        //初始化CloseableHttpClient
//        CloseableHttpClient httpClient;
//        if(Objects.isNull(proxy)){
//            httpClient = getCloseableHttpClient(connectTimeout, socketTimeout);
//        }else{
//            httpClient = getCloseableHttpClient(connectTimeout, socketTimeout, proxy);//设置代理
//        }
//        try {
//            if (params != null && !params.isEmpty()) {
//                List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size());
//                for (Object object : params.entrySet()) {
//                    Map.Entry entry = (Map.Entry) object;
//                    String value = entry.getValue().toString();
//                    if (value != null) {
//                        pairs.add(new BasicNameValuePair(entry.getKey().toString(), value));
//                    }
//                }
//                // 将请求参数和url进行拼接
//                url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset));
//            }
//            HttpGet httpGet = new HttpGet(url);
//            if(!headers.isEmpty()){//设置header头部
//                headers.stream().forEach(header -> httpGet.addHeader(header));
//            }
//            CloseableHttpResponse response = httpClient.execute(httpGet);
//            int statusCode = response.getStatusLine().getStatusCode();
//            if (statusCode != SC_OK) {
//                httpGet.abort();
//                throw new RuntimeException("HttpClient,error status code :" + statusCode);
//            }
//            HttpEntity entity = response.getEntity();
//            String result = null;
//            if (entity != null) {
//                result = EntityUtils.toString(entity, CHARSET);
//            }
//            EntityUtils.consume(entity);
//            response.close();
//            return result;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * HTTP Post 获取内容
//     * @param url     请求的url地址 ?之前的地址
//     * @param params  请求的参数
//     * @param charset 编码格式
//     * @return 页面内容
//     * @throws IOException
//     */
//    public static String doPost(String url, Map params, String charset, List<Header> headers, HttpHost proxy, int connectTimeout, int socketTimeout) {
//        if (StringUtils.isBlank(url)) {
//            return null;
//        }
//        //初始化CloseableHttpClient
//        CloseableHttpClient httpClient;
//        if(Objects.isNull(proxy)){
//            httpClient = getCloseableHttpClient(connectTimeout, socketTimeout);
//        }else{
//            httpClient = getCloseableHttpClient(connectTimeout, socketTimeout, proxy);//设置代理
//        }
//        CloseableHttpResponse response = null;
//        try {
//            //参数配置
//            List<NameValuePair> pairs = null;
//            if (params != null && !params.isEmpty()) {
//                pairs = new ArrayList<NameValuePair>(params.size());
//                for (Object object : params.entrySet()) {
//                    Map.Entry entry = (Map.Entry) object;
//                    String value = entry.getValue().toString();
//                    if (value != null) {
//                        pairs.add(new BasicNameValuePair(entry.getKey().toString(), value));
//                    }
//                }
//            }
//            HttpPost httpPost = new HttpPost(url);
//            if (pairs != null && pairs.size() > 0) {
//                httpPost.setEntity(new UrlEncodedFormEntity(pairs, charset));
//            }
//            response = httpClient.execute(httpPost);
//            int statusCode = response.getStatusLine().getStatusCode();
//            if (statusCode != SC_OK) {
//                httpPost.abort();
//                throw new RuntimeException("HttpClient,error status code :" + statusCode);
//            }
//            HttpEntity entity = response.getEntity();
//            String result = null;
//            if (entity != null) {
//                result = EntityUtils.toString(entity, CHARSET);
//            }
//            EntityUtils.consume(entity);
//            return result;
//        } catch (ParseException | IOException e) {
//            e.printStackTrace();
//        } finally {
//            if (response != null) {
//                try {
//                    response.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return null;
//    }
//
//    /**
//     * MultipartEntityBuilder中转上传参数
//     * @param url 请求URL路径
//     * @param params post请求参数
//     * @return
//     * @throws IOException
//     */
//    public static String doMultipartFilePost(String url, Map<String, Object> params, HttpEntity httpEntity) {
//        String result = "";
//        CloseableHttpClient httpClient = getCloseableHttpClient(CONNECTTIMEOUT, SOCKETTIMEOUT);
//        CloseableHttpResponse response = null;
//        try {
//            HttpPost httpPost = new HttpPost(url);
//            if(httpEntity == null){
//                MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
//                for (String key : params.keySet()) {
//                    if (key.equals("file")) {
//                        MultipartFile file = (MultipartFile) params.get(key);
//                        entityBuilder.addBinaryBody("file", file.getBytes(), ContentType.MULTIPART_FORM_DATA, file.getOriginalFilename());
//                    } else {
//                        entityBuilder.addTextBody(key, params.get(key).toString(), ContentType.TEXT_PLAIN);
//                    }
//                }
//                httpEntity = entityBuilder.build();
//            }
//            httpPost.setEntity(httpEntity);
//            response = httpClient.execute(httpPost);
//            int statusCode = response.getStatusLine().getStatusCode();
//            if (statusCode != SC_OK) {
//                httpPost.abort();
//                throw new RuntimeException("HttpClient,error status code :" + statusCode);
//            }
//            HttpEntity responseEntity = response.getEntity();
//            if (responseEntity != null) {
//                result = EntityUtils.toString(responseEntity, CHARSET);
//            }
//            EntityUtils.consume(responseEntity);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return result;
//    }
//}
